package cn.niit.smbms.controller.admin;

import cn.niit.smbms.entity.User;
import cn.niit.smbms.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

@Slf4j
@Controller
public class LoginController {
    @Autowired
    private UserService userService;

    /**
     * 首页
     * @return
     */
    @GetMapping("/index")
    public String home(HttpSession session){
        if (isLogin(session)){
            return "index";
        }
        return "redirect:/login";
    }

    /**
     * 当未登录用户访问登录页面时，加载显示登录页
     * @return
     */
    @RequestMapping(value="/login",method = RequestMethod.GET)
    public String login(HttpSession session){
        if (isLogin(session)){
            return "index";
        }
        return "login";
    }

    private boolean isLogin(HttpSession session) {
        Object user = session.getAttribute("user");
        if (null != user){
            return true;
        }
        return false;
    }

    /**
     * 登录操作，当用户点击登录按钮时，进行页面跳转
     * @param username
     * @param password
     * @return
     */
    @PostMapping("/login")
    public String toLogin(Model model, HttpSession session, @RequestParam("username") String username, @RequestParam("password") String password){
        /* 检验数据是否为空 */
        if ("".equals(username.trim()) || "".equals(password.trim())){
            model.addAttribute("errMsg","用户名或密码不能为空！");
            System.out.println("用户名或者密码不能为空！！！");
            return "login";
        }
        System.out.println("username = " + username + " password = " + password);
        //第一步：根据用户名和密码在数据库中查询
        User mysqlUser = userService.selectByUserNamePassword(username, password);
        log.info("用户登录：查询到的用户对象：{}， 用户ID: {}!", mysqlUser, mysqlUser.getId());
        //第二步：判断根据传入的用户名和密码在数据库中是否查询到用户（查询到，说明验证通过，查不到说明输入的信息错误）
        if (null == mysqlUser){/*错误写法：password == (mysqlUser.getPassword())*/
            model.addAttribute("errMsg","用户名或密码错误！");
            return "login";
        }
        //第三步：将用户信息存放至session当中
        session.setAttribute("user", mysqlUser);

        //这里不应该使用转发，应该使用重定向redirect
        //return "index";  //走转发
        return "redirect:/index";  //走重定向
    }

    /**
     * logout
     * @param session
     * @return
     */
    @GetMapping("/logout")
    public String logout(HttpSession session){
        session.removeAttribute("user");
        return "redirect:/login";
    }
}
